Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Basic support for DataContext={resource: ...} #1392

Open
wants to merge 15 commits into
base: main
Choose a base branch
from
Open

Conversation

exyi
Copy link
Member

@exyi exyi commented May 21, 2022

This functionality allows server-only rendering - i.e. building static HTML based on viewmodel which is not necessarily sent to the client.

The design is fairly simple - we allow resource binding
in data context and track that this data context does
not exist client-side (see the new ServerSideOnly property).
Using this server-only data context is not allowed in value
and staticCommand bindings. Note that using a value binding
inside the resource-bound control is allowed, it just cannot
reference _this. Since the context does not exist client-side,
we then translate _parent into $data instead of $parent.

Repeater, GridView and HierarchyRepeater should all support this.

@exyi exyi force-pushed the resource-datacontext branch 2 times, most recently from bcdd52d to e885da2 Compare May 25, 2022 18:23
@exyi exyi mentioned this pull request May 25, 2022
@exyi exyi force-pushed the resource-datacontext branch from d99fb15 to dca0a1b Compare August 2, 2022 18:08
@exyi exyi marked this pull request as ready for review August 2, 2022 21:25
@exyi exyi requested a review from a team August 2, 2022 21:25
@exyi exyi force-pushed the resource-datacontext branch from a9193f7 to 2fa5063 Compare August 3, 2022 14:31
@exyi exyi force-pushed the resource-datacontext branch 2 times, most recently from efbaf1e to 3ee2344 Compare September 11, 2022 21:32
@exyi exyi force-pushed the resource-datacontext branch from 3ee2344 to 14a7721 Compare September 14, 2022 10:37
exyi added a commit that referenced this pull request Dec 7, 2022
problem was that that BindingHelper.FindDataContextTarget
assumed there was one more data context layer since we used set
data context type and DataContext on different controls.
Because of that command client-side and server-side
data context paths didn't match.
Technically, this is a glitch of BindingHelper, not HierarchyRepeater,
but "fixing" BindingHelper will break many things and it's hopefully
going to be done in #1392
exyi added a commit that referenced this pull request Dec 7, 2022
problem was that that BindingHelper.FindDataContextTarget
assumed there was one more data context layer since we used set
data context type and DataContext on different controls.
Because of that command client-side and server-side
data context paths didn't match.
Technically, this is a glitch of BindingHelper, not HierarchyRepeater,
but "fixing" BindingHelper will break many things and it's hopefully
going to be done in #1392
exyi added a commit that referenced this pull request Dec 21, 2022
problem was that that BindingHelper.FindDataContextTarget
assumed there was one more data context layer since we used set
data context type and DataContext on different controls.
Because of that command client-side and server-side
data context paths didn't match.
Technically, this is a glitch of BindingHelper, not HierarchyRepeater,
but "fixing" BindingHelper will break many things and it's hopefully
going to be done in #1392
@exyi exyi added this to the Version 5.0 milestone Jan 4, 2023
exyi added a commit that referenced this pull request Jan 4, 2023
Part is taken from #1392 which won't be merged for a while.
exyi added a commit that referenced this pull request Feb 1, 2023
Part is taken from #1392 which won't be merged for a while.
@exyi exyi force-pushed the resource-datacontext branch from 14a7721 to dd7cf40 Compare February 25, 2024 16:15
exyi added 10 commits November 23, 2024 20:31
This functionality is essential for server-side
only rendering, but this patch is only the groundwork -
we still need to add support to Repeater and possibly other controls.

The design is fairly simple - we allow resource binding
in data context and track that this data context does
not exist client-side (see the new ServerSideOnly property).
Using this server-only data context is not allowed in value
and staticCommand bindings. Note that using a value binding
inside the resource-bound control is allowed, it just cannot
reference `_this`. Since the context does not exist client-side,
we then translate _parent into $data instead of $parent.
@exyi exyi force-pushed the resource-datacontext branch from dd7cf40 to 36f7055 Compare November 23, 2024 19:58
@exyi exyi force-pushed the resource-datacontext branch from 88d7168 to 3019446 Compare November 24, 2024 15:40
* ExpectedType property can now be null, when the assigned property is unknwon:
   - this means that CreateBinding will actually create a strongly
     typed instance, instead of just ValueBindingExpression<object> or similar
* AutoUI uses props.Property instead of CreateValueBinding where possible
@exyi exyi force-pushed the resource-datacontext branch from e7708ec to 10002de Compare December 1, 2024 15:58
exyi added 3 commits December 28, 2024 23:42
…property

This avoids being too sensitive to the DataContextType property,
which is often set incorrectly in our libraries (to hack around
other issues, so not easily fixed). We therefore switch
the IsServerSideOnly check to another dedicated property
which needs to be set by Repeater and similar controls.
This means that DataContext=resource compatibility will
need some non-obvious hack, but code which doesn't do that
will not be affected by the update to v5 in any way.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant